package com.novatec.dao;

import java.text.ParseException;
import java.util.Map;

import javax.sql.DataSource;

import org.apache.commons.beanutils.BeanMap;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
import org.springframework.jdbc.core.simple.SimpleJdbcTemplate;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

import com.novatec.mvc.forms.ContratoForm;
import com.novatec.mvc.modelo.CajasItem;

@SuppressWarnings("deprecation")
public class UsuariosDAO {
	
	private final Logger logger = Logger.getLogger(UsuariosDAO.class);
	private SimpleJdbcTemplate simpleJdbcTemplate;
//	private SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyy");

	@Autowired
    public void init(DataSource dataSource) {
        this.simpleJdbcTemplate = new SimpleJdbcTemplate(dataSource);
    }
	
	@Transactional(readOnly = false, propagation = Propagation.REQUIRED)
	public void insertarCajas(CajasItem cajasItem) throws ParseException {
		// TODO Auto-generated method stub
		
		String sql = "INSERT INTO tipocaja " +
		"(NombreTipoCaja,Descripcion,IndActivo,CantidadCajas,Precio)" +
		" VALUES (:nombrecontenedor, :descripcion, 1, :stockglobal, :precio)";
		
		Map<String, ?> cajasMap= new BeanMap(cajasItem);
		MapSqlParameterSource mapSQL= new MapSqlParameterSource(cajasMap);
		simpleJdbcTemplate.update(sql, mapSQL);
	
		logger.debug("cajas insertadas");
	}
	
	@Transactional(readOnly = true, propagation = Propagation.SUPPORTS)
	public Map getClienteByRUCDNI(String rucDNI){
		
		String sql= "SELECT idusuario, tipoPersona, ruc_dni, razonSocialNombre, direccion, zona, distrito, provincia, departamento, pais, telefono, email, gps_Latitud, gps_Longitud FROM cliente WHERE ruc_dni = ?";
		try{
			return simpleJdbcTemplate.queryForMap(sql, rucDNI);
		}catch(Exception e){
			return null;
		}
	}

	@Transactional(readOnly = false, propagation = Propagation.REQUIRED)
	public void actualizarinsertarCliente(ContratoForm contratoFormItem) {
		String sql = "SELECT count(0) FROM cliente WHERE ruc_dni = :ruc_dni";
		String sqlUpdate= "UPDATE cliente SET tipoPersona= :tipoPersona, razonSocialNombre= :razonSocialNombre, direccion= :direccion, zona= :zona, distrito= :distrito, provincia= :provincia, departamento= :departamento, pais= :pais, telefono= :telefono, email= :email, gps_Latitud= :gps_Latitud, gps_Longitud= :gps_Longitud WHERE ruc_dni = :ruc_dni";
		String sqlInsert= "INSERT INTO cliente (idUsuario, tipoPersona, ruc_dni, razonSocialNombre, direccion, zona, distrito, provincia, departamento, pais, telefono, email, gps_Latitud, gps_Longitud) " +
							"VALUES (10, :tipoPersona, :ruc_dni, :razonSocialNombre, :direccion, :zona, :distrito, :provincia, :departamento, :pais, :telefono, :email, :gps_Latitud, :gps_Longitud)";
		Map<String,Object> contratoFormMap= new BeanMap(contratoFormItem);
		//Si hay datos actualiza de lo contrario inserta
		if (simpleJdbcTemplate.queryForInt(sql, contratoFormMap)>0){
			logger.debug(sqlUpdate);
			simpleJdbcTemplate.update(sqlUpdate, contratoFormMap);
			logger.debug("cliente actualizado");//update
		}else{
			logger.debug(sqlInsert);
			simpleJdbcTemplate.update(sqlInsert, contratoFormMap);
			logger.debug("cliente insertado");//insert
		}
	}
	

}
